package com.srx.openfeign.utils;

import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import java.util.List;

/**
 * Excel操作工具类
 * <p>提供便捷方法创建带有样式和数据的Excel文件</p>
 * @author 沈汝旭
 * @since 2025-11-10 14:04:05
 * @version 1.0
 */
public class ExcelUtil
{

    /**
     * 创建一个包含单个工作表的Excel文件，表头和数据均居中显示，表头加粗
     *
     * @param sheetName 工作表名称
     * @param headers 表头数据（字符串数组）
     * @param data 数据内容，每行数据作为字符串列表
     * @return 返回创建好的Workbook对象（需手动关闭）
     */
    public static Workbook createExcelFile(String sheetName, String[] headers, List<List<String>> data) 
    {
        // 创建工作簿
        Workbook workbook = new XSSFWorkbook();
        // 创建工作表
        Sheet sheet = workbook.createSheet(sheetName);
        //创建表头样式
        CellStyle headerStyle = workbook.createCellStyle();
        //设置自动换行
        headerStyle.setWrapText(true);
            //设置字体为14号
            Font headerFont = workbook.createFont();
             headerFont.setBold(true);
             headerFont.setFontHeightInPoints((short) 14);
             headerFont.setFontName("楷体");
             headerStyle.setFont(headerFont);
            //设置居中
            headerStyle.setAlignment(HorizontalAlignment.CENTER);
            headerStyle.setVerticalAlignment(VerticalAlignment.CENTER);
        //创建数据样式
        CellStyle dataStyle = workbook.createCellStyle();
            //设置字体为14号
            Font dataFont = workbook.createFont();
            dataFont.setFontHeightInPoints((short) 14);
            dataFont.setFontName("楷体");
            dataStyle.setFont(dataFont);
            //设置居中
            dataStyle.setAlignment(HorizontalAlignment.CENTER);
            dataStyle.setVerticalAlignment(VerticalAlignment.CENTER);
        // 创建标题行
        Row headerRow = sheet.createRow(0);
        for (int i = 0; i < headers.length; i++)
        {
            //生成当前列
            Cell cell = headerRow.createCell(i);
            //给当前列设置内容
            cell.setCellValue(headers[i]);
            //应用样式
            cell.setCellStyle(headerStyle);
        }
        // 填充数据
        int rowNum = 1;
        for (List<String> rowData : data)
        {
            //生成当前行
            Row row = sheet.createRow(rowNum++);
            //对当前行的每列进行填充
            for (int i = 0; i < rowData.size(); i++)
            {
                //生成当前列
                Cell cell = row.createCell(i);
                //给当前列设置内容
                cell.setCellValue(rowData.get(i));
                //设置样式
                cell.setCellStyle(dataStyle);
            }
        }
        //列宽自适应
        for (int i = 0; i < headers.length; i++)
        {
            sheet.autoSizeColumn(i, true);
        }
        return workbook;
    }

}
